package praktikum4Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import praktikum4GastKomponente.Datentyp.DGastEMail;
import praktikum4GastKomponente.Datentyp.DGastIstStammkunde;
import praktikum4GastKomponente.Datentyp.DGastName;
import praktikum4GastKomponente.Datentyp.DGastNr;
import praktikum4GastKomponente.Entitaeten.EGast;
import praktikum4GastKomponente.Komponente.GastKomponente;


public class TestGastKomponente {

	@Before
	public void test_reset() {
		praktikum4Reservierungskomponente.Verwalter.VReservierungsServices
				.res();
		praktikum4GastKomponente.Verwalter.VGastServices.res();
	}

	@After
	public void test_reset2() {
		praktikum4Reservierungskomponente.Verwalter.VReservierungsServices
				.res();
		praktikum4GastKomponente.Verwalter.VGastServices.res();
	}

	@Test
	public void test_markiereGastAlsStammkunden() {
		GastKomponente gastKomponente = new GastKomponente();
		EGast gast_0 = gastKomponente.erzeugeGast(0, "Arnold Blaupiz", "arnold@blaupilz.de");
		gastKomponente.markiereGastAlsStammkunden(gast_0.getNr().getNr());
		EGast res = getGast(0);
		assertTrue(res.getIstStammkunde().getIstStammkunde());
	}

	@Test
	public void test_erzeugeGast() {
		GastKomponente gastKomponente = new GastKomponente();
		EGast res1 = gastKomponente.erzeugeGast(0, "Arnold Blaupiz", "arnold@blaupilz.de");
		EGast res2 = gastKomponente.erzeugeGast(1, "Arnold der Zweite", "arnold@blaupilz.de");
		System.out.println(res1);
		System.out.println(res2);
		EGast res3 = getGast(0);
		EGast res4 = getGast(1);
		assertEquals(res1, res3);
		assertEquals(res2, res4);
	}

	@Test
	public void test_sucheNachGastName() {
		GastKomponente gastKomponente = new GastKomponente();
		EGast res1 = gastKomponente.erzeugeGast(0, "Spiz pass auf", "spiz@pass.auf");
		EGast res2 = gastKomponente.sucheGastNachName("Spiz pass auf");
		System.out.println(res2);
		assertEquals(res1, res2);
	}

	public static EGast getGast(int nr){
		
		String querry = "SELECT * FROM GAST WHERE DGASTNR = " + nr;
		System.out.println(querry);
		EGast eGast;
	
		Statement stmt = statement();
		
		try {
			ResultSet rs = stmt.executeQuery(querry);
			rs.next();
			eGast = new EGast(new DGastNr(rs.getInt("DGASTNR")), new DGastName(rs.getString("DGASTNAME")), 
					new DGastEMail(rs.getString("DGASTEMAIL")), new DGastIstStammkunde(rs.getString("DGASTISTSTAMMGAST")));
			stmt.close();
			return eGast;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new ExceptionInInitializerError("Conection Faild");
		}

	}
	
	public static Statement statement() {

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			String url = "jdbc:oracle:thin:@oracle.informatik.haw-hamburg.de:1521:inf09";
			Connection con = DriverManager.getConnection(url,
					praktikum4GastKomponente.Connection.ConnectionDATA.ACC,
					praktikum4GastKomponente.Connection.ConnectionDATA.PASS);
			return con.createStatement();
		} catch (SQLException e) {
			throw new ExceptionInInitializerError("Conection Faild");
		} catch (ClassNotFoundException e) {
			throw new ExceptionInInitializerError("Conection Faild");
		}
	}

}
